home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_12_1986_Transactor_Publishing.d64 / cmd wedge.pal (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  8KB  |  305 lines

  1. 1000 ;
  2. 1010 ;command wedge
  3. 1020 ;by frank e. digioia
  4. 1030 ;11/17/85
  5. 1040 ;
  6. 1050 * = $c200
  7. 1060 ;
  8. 1070 init   lda #<cwedge    ;install wedge
  9. 1080 sta $0308
  10. 1090 lda #>cwedge
  11. 1100 sta $0309
  12. 1110 rts
  13. 1120 ;
  14. 1130 cwedge = *             ;this is the wedge
  15. 1140 jsr chrget      ;get next byte
  16. 1150 jsr chktok      ;what is itprint
  17. 1160 jmp $a7ae       ;interpreter loop
  18. 1170 ;
  19. 1180 rem    jmp $a93b       ;basic rem command
  20. 1190 ;
  21. 1200 chktok cmp #$27        ;single quoteprint
  22. 1210 beq rem         ;new rem command
  23. 1220 tax             ;set flags
  24. 1230 bpl wexit       ;not a token
  25. 1240 ;
  26. 1250 ldx #$00        ;use .x as index
  27. 1260 sta token       ;save for compare
  28. 1270 tloop  lda toktab,x    ;byte from table
  29. 1280 beq wexit       ;end of table
  30. 1290 cmp token       ;a matchprint
  31. 1300 beq exec        ;yes/execute it
  32. 1310 inx             ;no/bump index
  33. 1320 bne tloop       ;keep looking
  34. 1330 ;
  35. 1340 exec   txa             ;put offset in .a
  36. 1350 asl a           ;mult by two
  37. 1360 tax             ;use as index
  38. 1370 lda newadr+1,x  ;put address
  39. 1380 pha             ;of new routine
  40. 1390 lda newadr,x    ;on stack.
  41. 1400 pha
  42. 1410 jmp chrget      ;next byte & rts
  43. 1420 ;
  44. 1430 wexit  jsr chr(NULL)t      ;get byte again
  45. 1440 jmp $a7ed       ;give it to basic
  46. 1450 ;
  47. 1460 token  .byte $00
  48. 1470 toktab .byte $8c,$89,$8d,$9b,$92,$93,$94,$95,$00
  49. 1480 newadr .word restor-1,goto-1,gosub-1,list-1,wait-1,load-1,save-1,verify-1
  50. 1490 ;
  51. 1500 ;restore x,y -- all parms optional
  52. 1510 ;
  53. 1520 adr    = $5f           ;address of line
  54. 1530 chrget = $0073         ;get next byte
  55. 1540 chr(NULL)t = $0079         ;get last byte
  56. 1550 chkcom = $aefd         ;check on comma
  57. 1560 getin  = $ffe4         ;same as basic get
  58. 1570 getbyt = $b79e         ;get byte into .x
  59. 1580 frmnum = $ad8a         ;get numeric parm
  60. 1590 facint = $b7f7         ;change fac to int
  61. 1600 finadr = $a613         ;find adr of line
  62. 1610 undef  = $a8e3         ;undef'ed statment
  63. 1620 quote  = $22           ;ascii for quote
  64. 1630 data   = $83           ;token for data
  65. 1640 ;
  66. 1650 restor = *             ;new restore cmd
  67. 1660 bne *+5         ;any parmsprint
  68. 1670 jmp $a81d       ;no/use rom routine
  69. 1680 jsr getprm      ;yes/get line & adr
  70. 1690 lda adr         ;address lo
  71. 1700 ldy adr+1       ;address hi
  72. 1710 sec
  73. 1720 sbc #$01        ;subtract 1
  74. 1730 bcs *+3         ;decr hi byteprint
  75. 1740 dey
  76. 1750 sta $41         ;data pointer lo
  77. 1760 sty $42         ;data pointer hi
  78. 1770 jsr chr(NULL)t      ;another parmprint
  79. 1780 beq rdone       ;no/we're done
  80. 1790 ;
  81. 1800 jsr chkcom      ;yes/check comma
  82. 1810 jsr getbyt      ;get byte into .x
  83. 1820 txa
  84. 1830 beq rdone       ;0'th elementprintprintprint
  85. 1840 dex
  86. 1850 beq rdone       ;1'st element/done
  87. 1860 ldy #$04        ;.y is text index
  88. 1870 lda ($41),y     ;get byte of text
  89. 1880 cmp #data       ;data statement?
  90. 1890 bne findat      ;no/find it
  91. 1900 ;
  92. 1910 loop   iny             ;comma search loop
  93. 1920 lda ($41),y     ;get byte from line
  94. 1930 beq notfnd      ;end of line
  95. 1940 cmp #':'        ;colonprint
  96. 1950 beq notfnd      ;end of data stmnt
  97. 1960 cmp #quote      ;quoteprint
  98. 1970 beq finqte      ;find closing quote
  99. 1980 cmp #','        ;commaprint
  100. 1990 bne loop        ;no/try again
  101. 2000 dex             ;found one!
  102. 2010 bne loop        ;need .x more
  103. 2020 ;
  104. 2030 tya             ;put offset in .a
  105. 2040 clc             ;update the data
  106. 2050 adc $41         ;pointers
  107. 2060 sta $41
  108. 2070 bcc *+4
  109. 2080 inc $42
  110. 2090 rdone  rts
  111. 2100 ;
  112. 2110 findat lda #data       ;token for data
  113. 2120 .byte $2c       ;skip next instr.
  114. 2130 ;
  115. 2140 finqte lda #quote      ;token for quote
  116. 2150 sta $fb         ;save byte to find
  117. 2160 ;
  118. 2170 bloop  = *             ;find byte at $fb
  119. 2180 iny
  120. 2190 lda ($41),y     ;get byte of text
  121. 2200 beq notfnd      ;end of line
  122. 2210 cmp $fb         ;found itprint
  123. 2220 beq loop        ;yes/goto main loop
  124. 2230 bne bloop       ;no/keep looking
  125. 2240 ;
  126. 2250 notfnd = *             ;print mesg & die
  127. 2260 lda #<msg
  128. 2270 ldy #>msg
  129. 2280 jmp $a469       ;output err mesg
  130. 2290 ;
  131. 2300 getprm = *             ;get parm & check it
  132. 2310 jsr frmnum      ;get parm in fac
  133. 2320 jsr facint      ;convert to int.
  134. 2330 jsr finadr      ;get adr of line
  135. 2340 bcs found       ;line foundprint
  136. 2350 jmp undef       ;no/undef'ed line
  137. 2360 found  rts
  138. 2370 ;
  139. 2380 msg    .byte 'data element not found'
  140. 2390 eom    .byte $00
  141. 2400 ;
  142. 2410 ;goto -- computed goto statement
  143. 2420 ;
  144. 2430 goto   jsr frmnum      ;get parm in fac
  145. 2440 jsr facint      ;convert to integer
  146. 2450 jmp $a8a3       ;that's all folks!
  147. 2460 ;
  148. 2470 ;gosub - computed gosub statement
  149. 2480 ;
  150. 2490 gosub  lda #$03        ;half # of bytes
  151. 2500 jsr $a3fb       ;enough stack spaceprint
  152. 2510 lda $7b         ;text pointer hi
  153. 2520 pha
  154. 2530 lda $7a         ;text pointer lo
  155. 2540 pha
  156. 2550 lda $3a         ;line number hi
  157. 2560 pha
  158. 2570 lda $39         ;line number lo
  159. 2580 pha
  160. 2590 lda #$8d        ;token for gosub
  161. 2600 pha             ;as i.d. on stack
  162. 2610 jsr goto        ;do a goto
  163. 2620 jmp $a7ae       ;interpreter loop
  164. 2630 ;
  165. 2640 ;list - a list subroutine
  166. 2650 ;
  167. 2660 ierror = $0300         ;error vector
  168. 2670 olderr = $e38b         ;old vector
  169. 2680 ;
  170. 2690 list   ldx $3a         ;direct modeprint
  171. 2700 inx             ;set flags
  172. 2710 bne *+5         ;no/use our routine
  173. 2720 jmp $a69c       ;yes/use old one
  174. 2730 lda #<return    ;point error
  175. 2740 sta ierror      ;vector at return
  176. 2750 lda #>return    ;address for list
  177. 2760 sta ierror+1
  178. 2770 jsr chr(NULL)t      ;get byte again
  179. 2780 jsr $a69c       ;real list cmd
  180. 2790 ;
  181. 2800 return lda #<olderr    ;set error
  182. 2810 sta ierror      ;vector back to
  183. 2820 lda #>olderr    ;normal.
  184. 2830 sta ierror+1
  185. 2840 rts
  186. 2850 ;
  187. 2860 ;wait -- pause until key pressed
  188. 2870 ;
  189. 2880 wait   beq *+5         ;any parmsprint
  190. 2890 jmp $b82d       ;yes/use old wait
  191. 2900 wloop  jsr getin       ;get character
  192. 2910 beq wloop       ;buffer emptyprint
  193. 2920 sta $02         ;save character
  194. 2930 rts
  195. 2940 ;
  196. 2950 ;load/save -- all parms optional
  197. 2960 ;
  198. 2970 setnam = $ffbd         ;set name parameter
  199. 2980 setlfs = $ffba         ;set file parameter
  200. 2990 ;
  201. 3000 verify lda #$01        ;verify flag
  202. 3010 .byte $2c       ;skip next instr.
  203. 3020 load   lda #$00        ;flag for load
  204. 3030 sta $0a         ;store system flag
  205. 3040 lda #$00        ;act like load now
  206. 3050 .byte $2c       ;skip next instr.
  207. 3060 save   lda #$01        ;flag for save
  208. 3070 sta lsflag      ;store our flag
  209. 3080 lda #$00        ;default length
  210. 3090 jsr setnam      ;set default name
  211. 3100 ldx #$08        ;default device#
  212. 3110 jsr $e1db       ;get any parms
  213. 3120 lda $b7         ;length of name
  214. 3130 beq noname      ;no name specified
  215. 3140 ;
  216. 3150 sta len         ;store new name
  217. 3160 tay             ;use .y as index
  218. 3170 lda #$00        ;end name with 0
  219. 3180 sta name,y
  220. 3190 ;
  221. 3200 nloop  dey             ;copy new filename
  222. 3210 lda ($bb),y     ;get byte of name
  223. 3220 sta name,y      ;save it
  224. 3230 bne nloop       ;keep it up
  225. 3240 beq exit        ;continue command
  226. 3250 ;
  227. 3260 noname = *             ;no name specified
  228. 3270 lda len         ;is name definedprint
  229. 3280 beq exit        ;no/error coming up
  230. 3290 lda lsflag      ;load or saveprint
  231. 3300 beq setup       ;load/finish up
  232. 3310 ;
  233. 3320 lda name        ;set up two char
  234. 3330 sta abr         ;abbreviation of
  235. 3340 lda name+1      ;filename for
  236. 3350 sta abr+1       ;easy backup
  237. 3360 ;
  238. 3370 jsr scrach      ;scratch old backup
  239. 3380 jsr rename      ;create backup copy
  240. 3390 ;
  241. 3400 setup  lda len         ;get parameters
  242. 3410 ldx #<name      ;for filename to
  243. 3420 ldy #>name      ;load or save
  244. 3430 jsr setnam      ;set parameters
  245. 3440 ;
  246. 3450 exit   lda lsflag      ;load or saveprint
  247. 3460 bne save2       ;save commandprint
  248. 3470 jmp $e16f       ;continue load cmd
  249. 3480 ;
  250. 3490 save2  ldx $2d         ;end adr of save
  251. 3500 ldy $2e         ;i.e. start of vars
  252. 3510 lda #$2b        ;point to start adr
  253. 3520 jsr $ffd8       ;continue save cmd
  254. 3530 bcc *+5         ;normal termination
  255. 3540 jmp $e0f9       ;no/"break" error
  256. 3550 rts
  257. 3560 ;
  258. 3570 scrach = *             ;scratch backup
  259. 3580 lda #'s'        ;'s' for scratch
  260. 3590 sta cmd         ;set command
  261. 3600 lda #$00        ;end of buffer
  262. 3610 sta equal       ;no equal sign
  263. 3620 jmp send        ;send dos command
  264. 3630 ;
  265. 3640 rename = *             ;rename old file
  266. 3650 lda #'r'        ;'r' for rename
  267. 3660 sta cmd         ;set command
  268. 3670 lda #'='        ;equal sign
  269. 3680 sta equal       ;where elseprint
  270. 3690 jmp send        ;send dos command
  271. 3700 ;
  272. 3710 ;
  273. 3720 ;send -- this routine can be used
  274. 3730 ;to send any dos command to drive
  275. 3740 ;be sure to end command with zero
  276. 3750 ;
  277. 3760 ciout  = $ffa8         ;send serial port
  278. 3770 listen = $ffb1         ;tell drive listen
  279. 3780 second = $ff93         ;send 2nd adr lstn
  280. 3790 unlstn = $ffae         ;quit listening
  281. 3800 ;
  282. 3810 send   lda #$08        ;device number
  283. 3820 sta $ba         ;store for system
  284. 3830 jsr listen      ;listen to command
  285. 3840 lda #$6f        ;ch # or'ed w/$60
  286. 3850 sta $b9         ;secondary adr
  287. 3860 jsr second      ;send it to drive
  288. 3870 ;
  289. 3880 ldx #$00        ;use .x as index
  290. 3890 dloop  lda cmd,x       ;get byte of cmd
  291. 3900 beq exit1       ;0 byte marks end
  292. 3910 jsr ciout       ;output to drive
  293. 3920 inx             ;bump pointer
  294. 3930 bne dloop       ;jmp to dloop
  295. 3940 ;
  296. 3950 exit1  jmp unlstn      ;all done!
  297. 3960 ;
  298. 3970 len    .byte $00
  299. 3980 cmd    .byte 's0:'
  300. 3990 abr    .byte $00,$00,'.bak'
  301. 4000 equal  .byte $00
  302. 4010 name   * = *+16
  303. 4020 lsflag .byte $00
  304. 4030 .end
  305.